#ifndef Image_H
#define Image_H

#include <QMainWindow>

class Image
{
public:
    Image(); //构造函数，创建行列都为零的Image对象
    Image(int h, int w); //构造函数重载，创建h行，w列的Image对象
    Image(const char* ImageName); //构造函数重载，利用文件名从硬盘加载图像文件成为Image对象;
    Image(const Image &im); //拷贝构造函数;
    ~Image(); //析构函数;
    
    bool ReadBMP(const char* ImageName); //从硬盘文件中读入图像数据;
    bool WriteBMP(const char* filename); //将图像数据保存为图像文件;

    int Height()const;  // 获得矩阵的行数
    int Width()const;   // 获得矩阵的列数
    unsigned char& Set(int row, int col);
    unsigned char At(int row, int col)const;//获取第row行第col列的矩阵元素的值

    Image& operator=(const Image &im);//=运算符重载
    operator QImage();
    int SquareArray(int row, int col, int size, unsigned char** ptr)const;//返回(row,col)附近size*size的单通道方阵，长度为*num

    void Rotate();//逆时针90°旋转
    void Rotate2();//顺时针90°旋转
    void Flip_LR();//左右镜面翻转
    void Flip_UD();//上下镜面翻转
    void BrightLine(double alpha, int beta=0);//调整对比度alpha和亮度beta
    void GrayChange(double percent);//灰度
    void Inversion();//反相
    void Sgmtation(int delta,int r,int g,int b);//印章滤镜
    void Colortemperature (int epsilon);//色温调节
    void Woodcut(int num);//木刻滤镜
    void FindEdge(int epsilon, int r=0, int g=0, int b=0);//边缘检测
    void Sharpen(double zeta);//图像锐化
    void CoulorLayers(int eta);//色彩失真

protected:
    int height;
    int width;
    unsigned char **data;

};


#endif
